package com.yc.cloud.common.oauth.wechat.service.impl;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.yc.cloud.common.basic.exception.Asserts;
import com.yc.cloud.common.oauth.wechat.dto.QRCodeDto;
import com.yc.cloud.common.oauth.wechat.dto.WxAccessTokenDto;
import com.yc.cloud.common.oauth.wechat.dto.WxUserInfoDto;
import com.yc.cloud.common.oauth.wechat.dto.resp.WxServiceAccessTokenErrorResp;
import com.yc.cloud.common.oauth.wechat.service.WxService;
import com.yc.cloud.common.oauth.wechat.utils.WxMiniProgramUtils;
import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.springframework.stereotype.Service;

/**
 * 小程序实现类
 */
@Service("wxMiniProgramServiceImpl")
@Slf4j
public class WxMiniProgramServiceImpl implements WxService {

    @Override
    public WxAccessTokenDto getAccessToken(String code, String appid, String appKey) {
        val result = WxMiniProgramUtils.getAccessToken(appid, appKey);
        if (StrUtil.isNotEmpty(result)) {
            if (result.contains("errcode")) {
                val accessTokenResp = JSONUtil.toBean(result, WxServiceAccessTokenErrorResp.class);
                Asserts.fail(accessTokenResp.getErrmsg());
            }
            //小程序需要通过额外的方法获取openid
            // val openid = WxMiniProgramUtils.getOpenId(code, appid, appKey);
            val wxAccessTokenDto = JSONUtil.toBean(result, WxAccessTokenDto.class);
            if (wxAccessTokenDto != null) {
                // wxAccessTokenDto.setOpenid(openid);
                return wxAccessTokenDto;
            }
        }
        return null;
    }

    @Override
    public String getOpenId(String code, String appid, String appKey) {
        return WxMiniProgramUtils.getOpenId(code, appid, appKey);
    }

    @Override
    public WxUserInfoDto getUserInfo(String accessToken, String openId) {
        return null;
    }

    @Override
    public byte[] getQRCode(String accessToken, QRCodeDto qrCodeDto) {
        return WxMiniProgramUtils.getUnlimitedQRCode(accessToken,qrCodeDto);
    }

//    public void checkResult(String result) {
//        if (StrUtil.isEmpty(result)) {
//            Asserts.fail(WeChatTips.REQUEST_RESULT_EMPTY);
//        } else {
//            if (result.contains("errcode")) {
//                val accessTokenResp = JSONUtil.toBean(result, WxServiceAccessTokenErrorResp.class);
//                Asserts.fail(accessTokenResp.getErrmsg());
//            }
//        }
//    }


}
